package q829_consecutiveNumbersSum;

public class Solution_1 {
    /*
    此题是一个考察数学的题型
    首先我们考虑对于连续正整数的和是什么样的
    对于一个初始项为a 连续k个数的和是 a a+1 a+2 a+3 ... a+k-1
    我们可以把a抽取出来 相当于 k个a + (0 1 2 3 ... k - 1)
    而题目中希望我们求出这些和为n的有多少组 也就是我们求出这个方程有多少整数解
    我们将a设置为我们想要考虑是否有解的项
    那么对于1 - k-1这一段 将i看作k sum就是随着i变化的(0 1 2 3 ... k - 1)
    首先对于k个a + (0 1 2 3 ... k - 1) = n有解 那么首先n - sum > 0
    并且n - sum = ka 代表(n - sum)是a的倍数 所以(n - sum) % i == 0
    所以每次满足这个条件res++ 然后sum继续加i 直到sum > n
     */
    public int consecutiveNumbersSum(int n) {
        if (n <= 2) return 1;

        int res = 0, sum = 0;
        for (int i = 1; i < n; ++i) {
            if (n - sum > 0 && (n - sum) % i == 0) res++;

            sum += i;

            if (sum > n) break;

        }
        return res;

    }
}
